package com.wuxuan.javabase_homework.homework3;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 商户端进入店铺的界面
 */
public class BookScreen {
    private static Scanner sc = new Scanner(System.in);
    private Shop shop;
    private List<Book> books;

    BookScreen(Shop shop) {
        this.shop = shop;
        this.books = shop.getBooks();
    }

    /**
     * 进入店铺的启动按钮
     */
    public void start() {
        menu();
    }

    /**
     * 操作书籍的界面
     */
    private void menu() {
        while (true) {
            System.out.println("======================操作书籍========================");
            System.out.println("当前店铺：" + shop.getShopName());
            System.out.println("0.返回");
            System.out.println("1.添加书籍");
            System.out.println("2.删除书籍");
            System.out.println("3.编辑书籍");
            System.out.println("4.查看书籍");
            int choose = sc.nextInt();
            switch (choose) {
                case 0:
                    return;
                case 1:
                    addBook();
                    break;
                case 2:
                    deleteBook();
                    break;
                case 3:
                    updateBook();
                    break;
                case 4:
                    selectAllBooks();
                    break;
                default:
                    System.out.println("请输入正确的序号！");
            }
        }
    }

    /**
     * 添加书籍
     */
    private void addBook() {
        System.out.println("======================添加书籍========================");
        while (true) {
            System.out.println("请输入书名：");
            String name = sc.next();

            boolean exists = false;

            if (!books.isEmpty()) {
                // 检查书名是否已存在
                exists = books.stream().anyMatch(p -> p.getName().equals(name));
            }


            if (!exists) {
                //输入其他信息，添加书籍(其实在整个系统有输入的地方都可以做严谨的判断处理，以防乱输入，这里开发的简单一些,体现主要逻辑)
                System.out.println("请输入作者：");
                String author = sc.next();
                System.out.println("请输入出版社：");
                String publisher = sc.next();
                System.out.println("请输入单价：");
                double price = sc.nextDouble();
                System.out.println("请输入折扣：");
                double discount = sc.nextDouble();
                System.out.println("请输入库存：");
                int inventory = sc.nextInt();


                Book b = new Book(name, author, publisher, price, discount, inventory);
                books.add(b);
                break;
            } else {
                System.out.println("书名已存在，请重新输入！");
            }
        }
    }

    /**
     * 删除书籍
     */
    private void deleteBook() {
        System.out.println("======================删除书籍========================");
        if (books.isEmpty()) {
            System.out.println("当前店铺还没有任何书籍噢~");
        } else {
            while (true) {
                System.out.println("请输入书名：");
                String name = sc.next();

                boolean exists = false;

                if (!books.isEmpty()) {
                    // 检查书名在当前店铺是否已存在(一本书在不同店铺中也是正常的，所以只需要同一个店铺中不重名就可以了！)
                    exists = books.stream().anyMatch(p -> p.getName().equals(name));
                }

                if (exists) {
                    while (true) {
                        //最后的确认！！！
                        System.out.println("您确认要删除书籍" + name + "吗？ 确认请输入yes，取消请输入no：");
                        String choose = sc.next();
                        switch (choose) {
                            case "yes":
                                break;
                            case "no":
                                return;
                            default:
                                System.out.println("请输入yes 或 no ！");
                        }

                        //选了yes
                        //根据书名获取书的索引
                        Book b = books.stream().filter(z -> z.getName().equals(name)).findFirst().get();
                        //删除书籍
                        books.remove(b);

                        //思：这里我想起一个问题，就是说数据库索引就是会自增长，然后如果删除掉某个值，还是会继续往后面自增长，中间id会有空缺...以后开发这种id需要怎么样处理吗？
                        System.out.println("删除书籍成功！！！");
                        return;
                    }
                } else {
                    System.out.println("书名已存在，请重新输入！");
                }
            }
        }
    }

    /**
     * 编辑书籍
     */
    private void updateBook() {
        System.out.println("======================编辑书籍========================");
        if (books.isEmpty()) {
            System.out.println("当前店铺还没有任何书籍噢~");
        } else {
            while (true) {
                System.out.println("请输入书名：");
                String name = sc.next();

                boolean exists = false;

                if (!books.isEmpty()) {
                    // 检查书名是否已存在
                    exists = books.stream().anyMatch(p -> p.getName().equals(name));
                }

                if (exists) {
                    // 根据书名获取书籍
                    Book book = books.stream().filter(z -> z.getName().equals(name)).findFirst().get();

                    //前端是可以传空过来后端的，所以我这里这样设计，不过这里控制台不太能传空的样子？
                    System.out.println("请输入新的出版社（留空则不修改）：");
                    String newPublisher = sc.next();
                    if (!newPublisher.isEmpty()) {
                        book.setPublisher(newPublisher);
                    }

                    System.out.println("请输入新的单价（留空则不修改）：");
                    String priceInput = sc.next();
                    if (!priceInput.isEmpty()) {
                        double newPrice = Double.parseDouble(priceInput);
                        book.setPrice(newPrice);
                    }

                    System.out.println("请输入新的折扣（留空则不修改）：");
                    String discountInput = sc.next();
                    if (!discountInput.isEmpty()) {
                        double newDiscount = Double.parseDouble(discountInput);
                        book.setDiscount(newDiscount);
                    }

                    System.out.println("请输入新的库存（留空则不修改）：");
                    String inventoryInput = sc.next();
                    if (!inventoryInput.isEmpty()) {
                        int newInventory = Integer.parseInt(inventoryInput);
                        book.setInventory(newInventory);
                    }

                    System.out.println("编辑书籍成功！！！");
                    break;
                } else {
                    System.out.println("书名不存在，请重新输入！");
                }
            }
        }

    }


    /**
     * 查看书籍
     */
    private void selectAllBooks() {
        System.out.println("======================查看书籍========================");
        if (books.isEmpty()) {
            System.out.println("当前店铺还没有任何书籍噢~");
        } else {
            for (Book book : books) {
                System.out.println(book);
            }
        }
    }
}
